/* 
## 类的特点
1. 类声明不会被提升，与 let 和 const 一样，存在暂时性死区
2. 类中的所有代码均在严格模式下执行
3. 类的所有方法都是不可枚举的
4. 类的所有方法都无法被当作构造函数使用  
5. 类的构造器必须使用 new 来调用  
*/


class Animal {

    constructor(type, name, age, sex) {
        this.type = type;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    print() {
        console.log(`【种类】：${this.type}`);
        console.log(`【名字】：${this.name}`);
        console.log(`【年龄】：${this.age}`);
        console.log(`【性别】：${this.sex}`);
    }

}


const a = new Animal("狗", "旺财", 3, "男");
a.print();

for (const prop in a) {
    //原型成员可以被枚举,方法不可枚举
    console.log(prop)
}


/* 得到实例上的属性，不包含原型 */
console.log(Object.getOwnPropertyNames(a));

